#include <iostream>

using namespace std;
using ll=long long;
const int N=1<<21;

int g[21][21];
ll dp[1<<22][22];

int get_gcd(int x,int y)
{
	return y==0?x:get_gcd(y,x%y);
}

void init()
{
	for(int i=1;i<=21;i++)
	{
		for(int j=i+1;j<=21;j++)
		{
			if(get_gcd(i,j)==1)
			{
				g[i-1][j-1]=g[j-1][i-1]=1;
			}
		}
	}
}

int main()
{
	
	init();
	dp[1][0]=1;
	for(int i=1;i<N;i++)
	{
		for(int j=0;j<21;j++)
		{
			if(!(i>>j&1))
				continue;
			for(int k=0;k<21;k++)
			{
				if(g[j][k]==0 || i>>k&1)
				{
					continue;
				}
				dp[i+(1<<k)][k]+=dp[i][j];
			}
		}
	}
	ll ret=0;
	for(int i=0;i<21;i++)
	{
		ret+=dp[N-1][i];
	}
	cout<<ret<<endl;
	return 0;
}
